/**
 * @param {number[]} prices
 * @return {number}
 */
 var maxProfit = function(prices) {
  // 这个股票在某一天有五中状态
  // 0 没有操作 1 第一次买入 2 第一次卖出 3 第二次买入 4 第二次卖出
  let len = prices.length
  let dp = new Array(len).fill(0).map(()=>new Array(5).fill(0))
  // 初始化 dp[0][0] 就是没有操作就是0
  // dp[0][1] 就是第一次买入 就是 0 - prices[0]
  // dp[0][2] 就是第一次卖出  相当于买入又卖出 相当于0
  // dp[0][3] 第二次买入 相当于 买入卖出又买入 0 - prices[0]
  // dp[0][4] 第二次卖出 相当于 买入有卖出又买入有卖出 0
  dp[0][1] = -prices[0]
  dp[0][3] = -prices[0]
  for(let i = 1;i < len;i++){
    dp[i][0] = dp[i-1][0] // 这一层没操作的状态就是上一次没操作的状态
    dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0] - prices[i]) // 这一次的第一次买入相当于上一次的第一次买入没有操作 和上一次没有操作这次买入
    dp[i][2] = Math.max(dp[i-1][1] + prices[i],dp[i-1][2]) // 这一次的相当于第一次的买入然后再卖出 或者是第一次的卖出没有操作
    dp[i][3] = Math.max(dp[i-1][2] - prices[i],dp[i-1][3])
    dp[i][4] = Math.max(dp[i-1][3] + prices[i],dp[i-1][4])
  }
  return dp[len-1][4]
};